﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Linq;
using QL_DTTN.DTO.DTO;
using QL_DTTN.TTTS.BUS;
using DevExpress.XtraGrid.Views.Grid;
namespace QL_DTTN.TTTS
{
    public partial class FrmThemThiSinh : DevExpress.XtraEditors.XtraForm
    {
        private ThiSinh _thiSinh;
        private bool _isThem = true;
        private DataTable _dtDiemCong;
        private DataTable _dtcbxDiemCong;
        public ThiSinh ThiSinh
        {
            set
            {
                _isThem = false;
                _thiSinh = value;
            }
        }

        public FrmThemThiSinh()
        {
            InitializeComponent();
            _thiSinh = new ThiSinh();
            _dtDiemCong = new DataTable();
        }
        public FrmThemThiSinh(ThiSinh thiSinh)
        {
            InitializeComponent();
            this.ThiSinh = thiSinh;
        }

        private void FrmThemThiSinh_Load(object sender, EventArgs e)
        {
            cbxDiemCong_Load();
            cbxNoiSinh_Load();
            cbxDoiTuong_Load();
            cbxKyThi_Load();
            cbxDanToc_Load();
            cbxTinh_Load();
            cbxHeDaoTao_Load();
            cbxTinh_SelectedIndexChanged(sender, e);
            if (_isThem)
            {
                load_Them();
            }
            else
            {
                load_Sua();
            }
            gctDiemCong.DataSource = _dtDiemCong;
        }
        private void load_Them()
        {
            lblTieuDe.Text = "Thêm Thí Sinh";
            txtHoTen.Text = string.Empty;
            txtDiaChi.Text = string.Empty;
            txtSoBaoDanh.Text = string.Empty;
            txtSoCMNN.Text = string.Empty;
            rdgGioiTinh.EditValue = true;
            tetNgaySinh.EditValue = DateTime.Now;
            _dtDiemCong.Rows.Clear();
            gvwDiemCong.RefreshData();
        }
        private void them()
        {
            if (txtHoTen.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập họ tên.");
                txtHoTen.Focus();
                return;
            }
            if (txtDiaChi.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập địa chỉ.");
                txtDiaChi.Focus();
                return;
            }
            if (txtSoCMNN.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập địa chỉ.");
                txtSoCMNN.Focus();
                return;
            }
            if (tetNgaySinh.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập ngày sinh.");
                tetNgaySinh.Focus();
                return;
            }
            if (rdgGioiTinh.EditValue.ToString() == string.Empty)
            {
                MessageBox.Show("Chưa nhập ngày sinh.");
                rdgGioiTinh.Focus();
                return;
            }
            _thiSinh.SoBaoDanh = ThiSinh_Bus.getNewSoBaoDanh(DateTime.Now.Year.ToString());
            if (_thiSinh.SoBaoDanh.Trim() == "")
            {
                MessageBox.Show("Lỗi hệ thống.");
                return;
            }
            _thiSinh.SoCMND = txtSoCMNN.Text;
            _thiSinh.DiaChi = txtDiaChi.Text;
            _thiSinh.GioiTinh = Convert.ToBoolean(rdgGioiTinh.EditValue);
            _thiSinh.HoTen = txtHoTen.Text;
            _thiSinh.MaDanToc = Convert.ToInt16(cbxDanToc.SelectedValue);
            _thiSinh.MaDoiTuong = cbxDoiTuong.SelectedValue.ToString();
            _thiSinh.MaHeDaoTao = Convert.ToInt16(cbxHeDaoTao.SelectedValue);
            _thiSinh.MaKyThi = Convert.ToInt64(cbxKyThi.SelectedValue);
            _thiSinh.MaTinh = Convert.ToInt16(cbxNoiSinh.SelectedValue);
            _thiSinh.MaTruong = cbxTruong.SelectedValue.ToString();
            _thiSinh.NgaySinh = Convert.ToDateTime(tetNgaySinh.EditValue);
            if (tetNgayVaoDang.EditValue != null)
            {
                _thiSinh.NgayVaoDang = Convert.ToDateTime(tetNgayVaoDang.EditValue);
            }
            if (tetNgayVaoDoan.EditValue != null)
            {
                _thiSinh.NgayVaoDoan = Convert.ToDateTime(tetNgayVaoDoan.EditValue);
            }
            List<ChiTietDiemCong> lst = new List<ChiTietDiemCong>();
            foreach (DataRow item in _dtDiemCong.Rows)
            {
                ChiTietDiemCong ct = new ChiTietDiemCong(_thiSinh.SoBaoDanh, Convert.ToInt16(item["maDiemCong"]));
                lst.Add(ct);
            }
            bool kt = ThiSinh_Bus.Them(_thiSinh);

            if (kt)
            {
                if (!DiemCong_Bus.themChiTiet(lst))
                    MessageBox.Show("Lỗi");
                MessageBox.Show("Thêm thí sinh có số báo danh: " + _thiSinh.SoBaoDanh + " thành công");
                load_Them();
            }
            else
            {
                MessageBox.Show("Thêm thí sinh thất bại");
            }
        }
        private void load_Sua()
        {
            lblTieuDe.Text = "Sửa Thông Tin Thí Sinh";
            txtHoTen.Text = _thiSinh.HoTen;
            txtDiaChi.Text = _thiSinh.DiaChi;
            txtSoBaoDanh.Text = _thiSinh.SoBaoDanh;
            txtSoCMNN.Text = _thiSinh.SoCMND;
            rdgGioiTinh.EditValue = _thiSinh.GioiTinh;
            tetNgaySinh.EditValue = _thiSinh.NgaySinh;
            if (_thiSinh.NgayVaoDoan != new DateTime())
            {
                tetNgayVaoDoan.EditValue = _thiSinh.NgayVaoDoan;
            }
            else tetNgayVaoDoan.EditValue = null;
            if (_thiSinh.NgayVaoDang != new DateTime())
            {
                tetNgayVaoDang.EditValue = _thiSinh.NgayVaoDang;
            }
            else tetNgayVaoDang.EditValue = null;
            cbxKyThi.SelectedValue = _thiSinh.MaKyThi;
            cbxDanToc.SelectedValue = _thiSinh.MaDanToc;
            cbxDoiTuong.SelectedValue = _thiSinh.MaDoiTuong;
            cbxHeDaoTao.SelectedValue = _thiSinh.MaHeDaoTao;
            cbxNoiSinh.SelectedValue = _thiSinh.MaTinh;
            int matinh = Truong_Bus.getMaTinh(_thiSinh.MaTruong);
            if (matinh != -1)
            {
                cbxTinh.SelectedValue = matinh;
                cbxTruong.SelectedValue = _thiSinh.MaTruong;
            }
            else
            {
                cbxTinh.SelectedIndex = 0;
                cbxTruong.SelectedIndex = 0;
            }
            _dtDiemCong.Rows.Clear();
            DataTable dt = DiemCong_Bus.dataTable(_thiSinh.SoBaoDanh);
            if (dt != null)
            {
                foreach (DataRow item in dt.Rows)
                {
                    DataRow dr = _dtDiemCong.NewRow();
                    dr["maDiemCong"] = item["maDiemCong"];
                    dr["tenDiemCong"] = item["tenDiemCong"];
                    dr["loai"] = item["loai"];
                    dr["diem"] = item["diem"];
                    _dtDiemCong.Rows.Add(dr);
                }
            }
            gvwDiemCong.RefreshData();
        }
        private void sua()
        {
            if (txtHoTen.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập họ tên.");
                txtHoTen.Focus();
                return;
            }
            if (txtDiaChi.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập địa chỉ.");
                txtDiaChi.Focus();
                return;
            }
            if (txtSoCMNN.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập địa chỉ.");
                txtSoCMNN.Focus();
                return;
            }
            if (tetNgaySinh.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập ngày sinh.");
                tetNgaySinh.Focus();
                return;
            }
            if (rdgGioiTinh.EditValue.ToString() == string.Empty)
            {
                MessageBox.Show("Chưa nhập ngày sinh.");
                rdgGioiTinh.Focus();
                return;
            }
            _thiSinh.SoCMND = txtSoCMNN.Text;
            _thiSinh.DiaChi = txtDiaChi.Text;
            _thiSinh.GioiTinh = Convert.ToBoolean(rdgGioiTinh.EditValue);
            _thiSinh.HoTen = txtHoTen.Text;
            _thiSinh.MaDanToc = Convert.ToInt16(cbxDanToc.SelectedValue);
            _thiSinh.MaDoiTuong = cbxDoiTuong.SelectedValue.ToString();
            _thiSinh.MaHeDaoTao = Convert.ToInt16(cbxHeDaoTao.SelectedValue);
            _thiSinh.MaKyThi = Convert.ToInt64(cbxKyThi.SelectedValue);
            _thiSinh.MaTinh = Convert.ToInt16(cbxNoiSinh.SelectedValue);
            _thiSinh.MaTruong = cbxTruong.SelectedValue.ToString();
            _thiSinh.NgaySinh = Convert.ToDateTime(tetNgaySinh.EditValue);
            _thiSinh.NgayVaoDang = Convert.ToDateTime(tetNgayVaoDang.EditValue);
            _thiSinh.NgayVaoDoan = Convert.ToDateTime(tetNgayVaoDoan.EditValue);

            bool kt = ThiSinh_Bus.Sua(_thiSinh);
            if (kt)
            {
                MessageBox.Show("Sửa thông tin thí sinh có số báo danh: " + _thiSinh.SoBaoDanh + " thành công");
                load_Sua();
            }
            else
            {
                MessageBox.Show("Sửa thông tin thí sinh thất bại");
            }
        }
        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (_isThem)
            {
                them();
            }
            else
            {
                sua();
            }
        }
        private void btnHuy_Click(object sender, EventArgs e)
        {
            if (_isThem)
            {
                load_Them();

            }
            else
            {
                load_Sua();
            }

        }
        private void btnThoat_Click(object sender, EventArgs e)
        {
            DialogResult = MessageBox.Show("Bạn có chắc muốn thoát không?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
            if (DialogResult == DialogResult.OK)
            {
                this.Close();
            }

        }
        #region LoatComnobox
        private void cbxDoiTuong_Load()
        {
            cbxDoiTuong.DataSource = DoiTuong_Bus.dataTable();
            cbxDoiTuong.DisplayMember = "tenDoiTuong";
            cbxDoiTuong.ValueMember = "maDoiTuong";
        }
        private void cbxDiemCong_Load()
        {
            _dtcbxDiemCong = DiemCong_Bus.dataTable();
            _dtDiemCong = _dtcbxDiemCong.Copy();
            _dtDiemCong.Rows.Clear();
            cbxDiemCong.DataSource = _dtcbxDiemCong;
            cbxDiemCong.DisplayMember = "tenDiemCong";
            cbxDiemCong.ValueMember = "maDiemCong";

        }
        private void cbxKyThi_Load()
        {
            cbxKyThi.DataSource = KyThi_Bus.dataTable();
            cbxKyThi.ValueMember = "maKyThi";
            cbxKyThi.DisplayMember = "tenKyThi";
        }
        private void cbxNoiSinh_Load()
        {
            cbxNoiSinh.DataSource = Tinh_Bus.dataTable();
            cbxNoiSinh.DisplayMember = "tenTinh";
            cbxNoiSinh.ValueMember = "maTinh";
        }
        private void cbxTinh_Load()
        {
            cbxTinh.DataSource = Tinh_Bus.dataTable();
            cbxTinh.DisplayMember = "tenTinh";
            cbxTinh.ValueMember = "maTinh";
        }
        private void cbxDanToc_Load()
        {
            cbxDanToc.DataSource = DanToc_Bus.dataTable();
            cbxDanToc.DisplayMember = "tenDanToc";
            cbxDanToc.ValueMember = "maDanToc";
        }
        private void cbxHeDaoTao_Load()
        {
            cbxHeDaoTao.DataSource = HeDaoTao_Bus.dataTable();
            cbxHeDaoTao.DisplayMember = "tenHeDaoTao";
            cbxHeDaoTao.ValueMember = "maHeDaoTao";
        }
        private void cbxTinh_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cbxTinh.SelectedIndex != -1 && cbxTinh.SelectedValue.ToString() != "System.Data.DataRowView")
                {
                    cbxTruong.DataSource = Truong_Bus.dataTable(Convert.ToInt32(cbxTinh.SelectedValue));
                    cbxTruong.DisplayMember = "tenTruong";
                    cbxTruong.ValueMember = "maTruong";
                }
            }
            catch
            {

            }
        }
        #endregion
        private void btnImport_Click(object sender, EventArgs e)
        {
            FrmImportThiSinh frm = new FrmImportThiSinh();
            frm.ShowDialog();
        }
        private void btnThemDiemCong_Click(object sender, EventArgs e)
        {
            DataRowView dt = (DataRowView)cbxDiemCong.SelectedItem;
            DataRow dr = _dtDiemCong.NewRow();
            dr["maDiemCong"] = dt["maDiemCong"];
            dr["tenDiemCong"] = dt["tenDiemCong"];
            dr["loai"] = dt["loai"];
            dr["diem"] = dt["diem"];
            if (!(_dtDiemCong.Select(" loai = '" + dr["loai"] + "'").Length > 0))
            {
                if (!_isThem)
                {
                    List<ChiTietDiemCong> lst = new List<ChiTietDiemCong>();
                    lst.Add(new ChiTietDiemCong(_thiSinh.SoBaoDanh,Convert.ToInt16(dr["maDiemCong"])));
                    DiemCong_Bus.themChiTiet(lst);
                }
                _dtDiemCong.Rows.Add(dr);
                gvwDiemCong.RefreshData();
            }
        }
        private void gctDiemCong_ProcessGridKey(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete && gvwDiemCong.State != DevExpress.XtraGrid.Views.Grid.GridState.Editing)
            {
                if (XtraMessageBox.Show("Bạn muốn xóa?", "Quest", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    GridView view = sender as GridView;
                    if (!_isThem)
                    {
                        DiemCong_Bus.Xoa(new ChiTietDiemCong(_thiSinh.SoBaoDanh, Convert.ToInt16(gvwDiemCong.GetRowCellValue(gvwDiemCong.FocusedRowHandle, "maDiemCong"))));
                    }
                    _dtDiemCong.Rows.RemoveAt(gvwDiemCong.FocusedRowHandle);
                }
            }
        }




    }
}